{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Generalized Advantage Estimation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import gym\n",
    "gym.logger.set_level(40)\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n",
    "\n",
    "from IPython.display import clear_output\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from timeit import default_timer as timer\n",
    "from datetime import timedelta\n",
    "import os\n",
    "import glob\n",
    "\n",
    "\n",
    "from baselines.common.vec_env.dummy_vec_env import DummyVecEnv\n",
    "from baselines.common.vec_env.subproc_vec_env import SubprocVecEnv\n",
    "\n",
    "from utils.hyperparameters import Config\n",
    "from utils.plot import plot\n",
    "from utils.wrappers import make_env_a2c_atari\n",
    "from agents.A2C import Model as A2C"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hyperparameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "log_dir = \"/tmp/gym/\"\n",
    "\n",
    "try:\n",
    "    os.makedirs(log_dir)\n",
    "except OSError:\n",
    "    files = glob.glob(os.path.join(log_dir, '*.monitor.csv'))\n",
    "    for f in files:\n",
    "        os.remove(f)\n",
    "\n",
    "config = Config()\n",
    "\n",
    "#a2c control\n",
    "config.num_agents=16\n",
    "config.rollout=5\n",
    "config.USE_GAE=True\n",
    "config.gae_tau = 0.95\n",
    "\n",
    "#misc agent variables\n",
    "config.GAMMA=0.99\n",
    "config.LR=7e-4\n",
    "config.entropy_loss_weight=0.01\n",
    "config.value_loss_weight=0.5\n",
    "\n",
    "# Number of updates in 10000000 frames\n",
    "config.MAX_FRAMES=int(1e7 / config.num_agents / config.rollout)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Rollout Storage"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class RolloutStorage(object):\n",
    "    def __init__(self, num_steps, num_processes, obs_shape, action_space, device, USE_GAE=True, gae_tau=0.95):\n",
    "        self.observations = torch.zeros(num_steps + 1, num_processes, *obs_shape).to(device)\n",
    "        self.rewards = torch.zeros(num_steps, num_processes, 1).to(device)\n",
    "        self.value_preds = torch.zeros(num_steps + 1, num_processes, 1).to(device)\n",
    "        self.returns = torch.zeros(num_steps + 1, num_processes, 1).to(device)\n",
    "        self.action_log_probs = torch.zeros(num_steps, num_processes, 1).to(device)\n",
    "        self.actions = torch.zeros(num_steps, num_processes, 1).to(device, torch.long)\n",
    "        self.masks = torch.ones(num_steps + 1, num_processes, 1).to(device)\n",
    "\n",
    "        self.num_steps = num_steps\n",
    "        self.step = 0\n",
    "        self.gae = USE_GAE\n",
    "        self.gae_tau = gae_tau\n",
    "\n",
    "    def insert(self, current_obs, action, action_log_prob, value_pred, reward, mask):\n",
    "        self.observations[self.step + 1].copy_(current_obs)\n",
    "        self.actions[self.step].copy_(action)\n",
    "        self.action_log_probs[self.step].copy_(action_log_prob)\n",
    "        self.value_preds[self.step].copy_(value_pred)\n",
    "        self.rewards[self.step].copy_(reward)\n",
    "        self.masks[self.step + 1].copy_(mask)\n",
    "\n",
    "        self.step = (self.step + 1) % self.num_steps\n",
    "\n",
    "    def after_update(self):\n",
    "        self.observations[0].copy_(self.observations[-1])\n",
    "        self.masks[0].copy_(self.masks[-1])\n",
    "\n",
    "    def compute_returns(self, next_value, gamma):\n",
    "        self.value_preds[-1] = next_value\n",
    "        gae = 0\n",
    "        for step in reversed(range(self.rewards.size(0))):\n",
    "            delta = self.rewards[step] + gamma * self.value_preds[step + 1] * self.masks[step + 1] - self.value_preds[step]\n",
    "            gae = delta + gamma * self.gae_tau * self.masks[step + 1] * gae\n",
    "            self.returns[step] = gae + self.value_preds[step]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Agent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Model(A2C):\n",
    "    def __init__(self, static_policy=False, env=None, config=None):\n",
    "        super(Model, self).__init__(static_policy, env, config)\n",
    "\n",
    "        self.rollouts = RolloutStorage(self.rollout, self.num_agents,\n",
    "            self.num_feats, self.env.action_space, self.device, config.USE_GAE, config.gae_tau)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training Loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Updates 125000, Num Timesteps 10000080, FPS 2254,\n",
      "Mean/Median Reward 18.7/19.0, Min/Max Reward 14.0/21.0,\n",
      "Entropy 1.59870, Value Loss 0.01055, Policy Loss -0.03340\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if __name__=='__main__':\n",
    "    seed = 1\n",
    "\n",
    "    torch.manual_seed(seed)\n",
    "    if torch.cuda.is_available():\n",
    "        torch.cuda.manual_seed(seed)\n",
    "\n",
    "    torch.set_num_threads(1)\n",
    "\n",
    "    env_id = \"PongNoFrameskip-v4\"\n",
    "    envs = [make_env_a2c_atari(env_id, seed, i, log_dir) for i in range(config.num_agents)]\n",
    "    envs = SubprocVecEnv(envs) if config.num_agents > 1 else DummyVecEnv(envs)\n",
    "\n",
    "    obs_shape = envs.observation_space.shape\n",
    "    obs_shape = (obs_shape[0] * 4, *obs_shape[1:])\n",
    "\n",
    "    model = Model(env=envs, config=config)\n",
    "\n",
    "    current_obs = torch.zeros(config.num_agents, *obs_shape,\n",
    "                    device=config.device, dtype=torch.float)\n",
    "\n",
    "    def update_current_obs(obs):\n",
    "        shape_dim0 = envs.observation_space.shape[0]\n",
    "        obs = torch.from_numpy(obs.astype(np.float32)).to(config.device)\n",
    "        current_obs[:, :-shape_dim0] = current_obs[:, shape_dim0:]\n",
    "        current_obs[:, -shape_dim0:] = obs\n",
    "\n",
    "    obs = envs.reset()\n",
    "    update_current_obs(obs)\n",
    "\n",
    "    model.rollouts.observations[0].copy_(current_obs)\n",
    "    \n",
    "    episode_rewards = np.zeros(config.num_agents, dtype=np.float)\n",
    "    final_rewards = np.zeros(config.num_agents, dtype=np.float)\n",
    "\n",
    "    start=timer()\n",
    "\n",
    "    print_step = 1\n",
    "    print_threshold = 10\n",
    "    \n",
    "    for frame_idx in range(1, config.MAX_FRAMES+1):\n",
    "        for step in range(config.rollout):\n",
    "            with torch.no_grad():\n",
    "                values, actions, action_log_prob = model.get_action(model.rollouts.observations[step])\n",
    "            cpu_actions = actions.view(-1).cpu().numpy()\n",
    "    \n",
    "            obs, reward, done, _ = envs.step(cpu_actions)\n",
    "\n",
    "            episode_rewards += reward\n",
    "            masks = 1. - done.astype(np.float32)\n",
    "            final_rewards *= masks\n",
    "            final_rewards += (1. - masks) * episode_rewards\n",
    "            episode_rewards *= masks\n",
    "\n",
    "            rewards = torch.from_numpy(reward.astype(np.float32)).view(-1, 1).to(config.device)\n",
    "            masks = torch.from_numpy(masks).to(config.device).view(-1, 1)\n",
    "\n",
    "            current_obs *= masks.view(-1, 1, 1, 1)\n",
    "            update_current_obs(obs)\n",
    "\n",
    "            model.rollouts.insert(current_obs, actions.view(-1, 1), action_log_prob, values, rewards, masks)\n",
    "            \n",
    "        with torch.no_grad():\n",
    "            next_value = model.get_values(model.rollouts.observations[-1])\n",
    "\n",
    "        model.rollouts.compute_returns(next_value, config.GAMMA)\n",
    "            \n",
    "        value_loss, action_loss, dist_entropy = model.update(model.rollouts)\n",
    "        \n",
    "        model.rollouts.after_update()\n",
    "\n",
    "        if frame_idx % 100 == 0:\n",
    "            try:\n",
    "                clear_output()\n",
    "                end = timer()\n",
    "                total_num_steps = (frame_idx + 1) * config.num_agents * config.rollout\n",
    "                print(\"Updates {}, Num Timesteps {}, FPS {},\\nMean/Median Reward {:.1f}/{:.1f}, Min/Max Reward {:.1f}/{:.1f},\\nEntropy {:.5f}, Value Loss {:.5f}, Policy Loss {:.5f}\".\n",
    "                format(frame_idx, total_num_steps,\n",
    "                       int(total_num_steps / (end - start)),\n",
    "                       np.mean(final_rewards),\n",
    "                       np.median(final_rewards),\n",
    "                       np.min(final_rewards),\n",
    "                       np.max(final_rewards), dist_entropy,\n",
    "                       value_loss, action_loss))\n",
    "                plot(log_dir, \"PongNoFrameskip-v4\", 'a2c', \n",
    "                     config.MAX_FRAMES * config.num_agents * config.rollout)\n",
    "            except IOError:\n",
    "                pass\n",
    "\n",
    "    model.save_w()\n",
    "    envs.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
